home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software Vault: The Gold Collection
/
Software Vault - The Gold Collection (American Databankers) (1993).ISO
/
cdr47
/
masm.zip
/
MASM.LBR
/
CV.AQM
/
CV.ASM
Wrap
Assembly Source File
|
1993-04-07
|
2KB
|
117 lines
PAGE ,132
NAME CV
TITLE Change/create volume name
COMMENT * Syntax: CV [d:]volname
(no blanks between [d:] and
first character of volname;
volname itself may contain
blanks)
Changes directory of drive specified to root; if a volume
entry exists, it is renamed 'volname'; otherwise a volume entry
with that name is created in the root directory.
- 16 Sept. 1983, Thomas G. Roberts -
*
CODE SEGMENT
ORG 100H
ASSUME CS:CODE,DS:CODE,ES:CODE
CVOL PROC FAR
JMP START
;-------- Data area --------
FCB DB 0FFH
DB 5 DUP(0)
ATTR DB 8
DRV DB 0
VNAME DB 11 DUP('?')
DB 5 DUP(?)
NEW DB 20 DUP(?)
CDSTR DB ?,':\',0
ERMSG DB 'Incorrect DOS version.$'
DUMMY DB ?,':XYZZY',0
M2 DB 'CV: Cannot create volume entry'
LM2 EQU $ - M2
;-----------------------------
START: MOV AH,30H
INT 21H ;get vers.#
CMP AL,2
JNB OK
MOV DX,OFFSET ERMSG
MOV AH,9
INT 21H
INT 20H
OK: MOV SI,82H
SUB CX,CX
MOV CL,[SI-2]
CMP CL,2
JB EXIT ;no parms
DEC CX ;separator at 81H
MOV DI,SI
LSPC: MOV AL,[SI]
CMP AL,20H ;scan leading blanks
JNZ NXT
INC SI
LOOP LSPC
JMP EXIT ;all blanks ??
NXT:
REP MOVSB
MOV BX,5CH
MOV AL,[BX] ;get drive byte
CMP AL,0
JNZ SKP
MOV AH,19H ;get deflt driv #
INT 21H
INC AL
SKP: MOV DRV,AL
OR AL,40H ;make drive letter
MOV CDSTR,AL
MOV DUMMY,AL ;in case no vol.exists
MOV DX,OFFSET CDSTR
MOV AX,3B00H
INT 21H ;cd drv:\
MOV DX,OFFSET FCB
MOV AH,1AH
INT 21H ;set DTA
BACK: MOV AH,11H
INT 21H ;get vol.name
CMP AL,0FFH ;none
JNE GO
MOV DX,OFFSET DUMMY
MOV CX,8 ;vol.attr.
MOV AH,3CH ;create
INT 21H ;dummy vol.
CMP AX,2 ;this is returned with CY (?)
JNE ERR ;cant create
MOV DX,OFFSET FCB
JMP BACK
GO: MOV CX,90H
SUB CX,DI
MOV AL,20H
REP STOSB ;pad w/blanks
MOV CX,11
MOV SI,82H
MOV AL,[BX] ;drive byte again
CMP AL,0 ;is drive @ 82H?
JZ DFLT
INC SI
INC SI
DFLT: MOV DI,OFFSET NEW
REP MOVSB ;setup
MOV AH,17H ;rename
INT 21H ;could do msg/errorlevel if CF=1
EXIT: INT 20H
ERR: MOV BX,2 ;std err
MOV CX,LM2
MOV DX,OFFSET M2
MOV AH,40H
INT 21H
INT 20H
CVOL ENDP
CODE ENDS
END CVOL